/**
 * Copyright 2014-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.webank.webase.front.contractStore;


public class ToolsConstantContext {
    public static final String ADDRESS_SOURCE = "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjQ7CgpsaWJyYXJ5IEFkZHJlc3MgewoKICAgIGZ1bmN0aW9uIGlzQ29udHJhY3QoYWRkcmVzcyBhZGRyKSBpbnRlcm5hbCB2aWV3IHJldHVybnMoYm9vbCkgewogICAgICAgIHVpbnQyNTYgc2l6ZTsKICAgICAgICBhc3NlbWJseSB7IHNpemUgOj0gZXh0Y29kZXNpemUoYWRkcikgfSAgCiAgICAgICAgcmV0dXJuIHNpemUgPiAwOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRW1wdHlBZGRyZXNzKGFkZHJlc3MgYWRkcikgaW50ZXJuYWwgcHVyZSByZXR1cm5zKGJvb2wpewogICAgICAgIHJldHVybiBhZGRyID09IGFkZHJlc3MoMCk7CiAgICB9Cn0=";
    public static final String LIB_STRING_SOURCE = "Ci8qKgogKiBAZmlsZTogTGliU3RyaW5nCiAqIEBhdXRob3I6IGZpc2NvLWRldgogKiAKICogQGRhdGU6IDIwMTgKICovCgpwcmFnbWEgc29saWRpdHkgXjAuNC4xMTsKCmxpYnJhcnkgTGliU3RyaW5nIHsKICAgIAogICAgdXNpbmcgTGliU3RyaW5nIGZvciAqOwogICAgCiAgICBmdW5jdGlvbiBtZW1jcHkodWludCBkZXN0LCB1aW50IHNyYywgdWludCBsZW4pIHByaXZhdGUgewogICAgICAgIC8vIENvcHkgd29yZC1sZW5ndGggY2h1bmtzIHdoaWxlIHBvc3NpYmxlCiAgICAgICAgZm9yKDsgbGVuID49IDMyOyBsZW4gLT0gMzIpIHsKICAgICAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAgICAgbXN0b3JlKGRlc3QsIG1sb2FkKHNyYykpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzdCArPSAzMjsKICAgICAgICAgICAgc3JjICs9IDMyOwogICAgICAgIH0KCiAgICAgICAgLy8gQ29weSByZW1haW5pbmcgYnl0ZXMKICAgICAgICB1aW50IG1hc2sgPSAyNTYgKiogKDMyIC0gbGVuKSAtIDE7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgc3JjcGFydCA6PSBhbmQobWxvYWQoc3JjKSwgbm90KG1hc2spKQogICAgICAgICAgICBsZXQgZGVzdHBhcnQgOj0gYW5kKG1sb2FkKGRlc3QpLCBtYXNrKQogICAgICAgICAgICBtc3RvcmUoZGVzdCwgb3IoZGVzdHBhcnQsIHNyY3BhcnQpKQogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gUmV0dXJucyB0aGUgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YKICAgIC8vIGBuZWVkbGVgIGluIGBzZWxmYCwgb3IgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgYHNlbGZgIGlmIG5vdCBmb3VuZC4KICAgIGZ1bmN0aW9uIGZpbmRQdHIodWludCBzZWxmbGVuLCB1aW50IHNlbGZwdHIsIHVpbnQgbmVlZGxlbGVuLCB1aW50IG5lZWRsZXB0cikgcHJpdmF0ZSByZXR1cm5zICh1aW50KSB7CiAgICAgICAgdWludCBwdHI7CiAgICAgICAgdWludCBpZHg7CgogICAgICAgIGlmIChuZWVkbGVsZW4gPD0gc2VsZmxlbikgewogICAgICAgICAgICBpZiAobmVlZGxlbGVuIDw9IDMyKSB7CiAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZWQgYXNzZW1ibHkgZm9yIDY4IGdhcyBwZXIgYnl0ZSBvbiBzaG9ydCBzdHJpbmdzCiAgICAgICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IG1hc2sgOj0gbm90KHN1YihleHAoMiwgbXVsKDgsIHN1YigzMiwgbmVlZGxlbGVuKSkpLCAxKSkKICAgICAgICAgICAgICAgICAgICBsZXQgbmVlZGxlZGF0YSA6PSBhbmQobWxvYWQobmVlZGxlcHRyKSwgbWFzaykKICAgICAgICAgICAgICAgICAgICBsZXQgZW5kIDo9IGFkZChzZWxmcHRyLCBzdWIoc2VsZmxlbiwgbmVlZGxlbGVuKSkKICAgICAgICAgICAgICAgICAgICBwdHIgOj0gc2VsZnB0cgogICAgICAgICAgICAgICAgICAgIGxvb3A6CiAgICAgICAgICAgICAgICAgICAganVtcGkoZXhpdCwgZXEoYW5kKG1sb2FkKHB0ciksIG1hc2spLCBuZWVkbGVkYXRhKSkKICAgICAgICAgICAgICAgICAgICBwdHIgOj0gYWRkKHB0ciwgMSkKICAgICAgICAgICAgICAgICAgICBqdW1waShsb29wLCBsdChzdWIocHRyLCAxKSwgZW5kKSkKICAgICAgICAgICAgICAgICAgICBwdHIgOj0gYWRkKHNlbGZwdHIsIHNlbGZsZW4pCiAgICAgICAgICAgICAgICAgICAgZXhpdDoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBGb3IgbG9uZyBuZWVkbGVzLCB1c2UgaGFzaGluZwogICAgICAgICAgICAgICAgYnl0ZXMzMiBoYXNoOwogICAgICAgICAgICAgICAgYXNzZW1ibHkgeyBoYXNoIDo9IHNoYTMobmVlZGxlcHRyLCBuZWVkbGVsZW4pIH0KICAgICAgICAgICAgICAgIHB0ciA9IHNlbGZwdHI7CiAgICAgICAgICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8PSBzZWxmbGVuIC0gbmVlZGxlbGVuOyBpZHgrKykgewogICAgICAgICAgICAgICAgICAgIGJ5dGVzMzIgdGVzdEhhc2g7CiAgICAgICAgICAgICAgICAgICAgYXNzZW1ibHkgeyB0ZXN0SGFzaCA6PSBzaGEzKHB0ciwgbmVlZGxlbGVuKSB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc2ggPT0gdGVzdEhhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICAgICAgICAgcHRyICs9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGZwdHIgKyBzZWxmbGVuOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBjb21wYXJlKHN0cmluZyBfc2VsZiwgc3RyaW5nIF9zdHIpIGludGVybmFsIHJldHVybnMgKGludDggX3JldCkgewogICAgICAgIGZvciAodWludCBpPTA7IGk8Ynl0ZXMoX3NlbGYpLmxlbmd0aCAmJiBpPGJ5dGVzKF9zdHIpLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGlmIChieXRlcyhfc2VsZilbaV0gPiBieXRlcyhfc3RyKVtpXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMoX3NlbGYpW2ldIDwgYnl0ZXMoX3N0cilbaV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpLmxlbmd0aCA+IGJ5dGVzKF9zdHIpLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGlmIChieXRlcyhfc2VsZikubGVuZ3RoIDwgYnl0ZXMoX3N0cikubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY29tcGFyZU5vQ2FzZShzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyKSBpbnRlcm5hbCByZXR1cm5zIChpbnQ4IF9yZXQpIHsKICAgICAgICBmb3IgKHVpbnQgaT0wOyBpPGJ5dGVzKF9zZWxmKS5sZW5ndGggJiYgaTxieXRlcyhfc3RyKS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBieXRlIGNoMSA9IGJ5dGVzKF9zZWxmKVtpXXwweDIwOwogICAgICAgICAgICBieXRlIGNoMiA9IGJ5dGVzKF9zdHIpW2ldfDB4MjA7CiAgICAgICAgICAgIGlmIChjaDEgPj0gJ2EnICYmIGNoMSA8PSd6JyAmJiBjaDIgPj0gJ2EnICYmIGNoMiA8PSd6JykgewogICAgICAgICAgICAgICAgaWYgKGNoMSA+IGNoMikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaDEgPCBjaDIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpW2ldID4gYnl0ZXMoX3N0cilbaV0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXMoX3NlbGYpW2ldIDwgYnl0ZXMoX3N0cilbaV0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKS5sZW5ndGggPiBieXRlcyhfc3RyKS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBpZiAoYnl0ZXMoX3NlbGYpLmxlbmd0aCA8IGJ5dGVzKF9zdHIpLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGVxdWFscyhzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyKSBpbnRlcm5hbCByZXR1cm5zIChib29sIF9yZXQpIHsKICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpLmxlbmd0aCAhPSBieXRlcyhfc3RyKS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZm9yICh1aW50IGk9MDsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSAhPSBieXRlcyhfc3RyKVtpXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGVxdWFsc05vQ2FzZShzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyKSBpbnRlcm5hbCByZXR1cm5zIChib29sIF9yZXQpIHsKICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpLmxlbmd0aCAhPSBieXRlcyhfc3RyKS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZm9yICh1aW50IGk9MDsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgYnl0ZSBjaDEgPSBieXRlcyhfc2VsZilbaV18MHgyMDsKICAgICAgICAgICAgYnl0ZSBjaDIgPSBieXRlcyhfc3RyKVtpXXwweDIwOwogICAgICAgICAgICBpZiAoY2gxID49ICdhJyAmJiBjaDEgPD0neicgJiYgY2gyID49ICdhJyAmJiBjaDIgPD0neicpIHsKICAgICAgICAgICAgICAgIGlmIChjaDEgIT0gY2gyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSAhPSBieXRlcyhfc3RyKVtpXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gc3Vic3RyKHN0cmluZyBfc2VsZiwgdWludCBfc3RhcnQsIHVpbnQgX2xlbikgaW50ZXJuYWwgcmV0dXJucyAoc3RyaW5nIF9yZXQpIHsKICAgICAgICBpZiAoX2xlbiA+IGJ5dGVzKF9zZWxmKS5sZW5ndGgtX3N0YXJ0KSB7CiAgICAgICAgICAgIF9sZW4gPSBieXRlcyhfc2VsZikubGVuZ3RoLV9zdGFydDsKICAgICAgICB9CgogICAgICAgIGlmIChfbGVuIDw9IDApIHsKICAgICAgICAgICAgX3JldCA9ICIiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIF9yZXQgPSBuZXcgc3RyaW5nKF9sZW4pOwoKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCByZXRwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgcmV0cHRyIDo9IGFkZChfcmV0LCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBtZW1jcHkocmV0cHRyLCBzZWxmcHRyK19zdGFydCwgX2xlbik7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGNvbmNhdChzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyKSBpbnRlcm5hbCByZXR1cm5zIChzdHJpbmcgX3JldCkgewogICAgICAgIF9yZXQgPSBuZXcgc3RyaW5nKGJ5dGVzKF9zZWxmKS5sZW5ndGggKyBieXRlcyhfc3RyKS5sZW5ndGgpOwoKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCBzdHJwdHI7CiAgICAgICAgdWludCByZXRwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgc3RycHRyIDo9IGFkZChfc3RyLCAweDIwKQogICAgICAgICAgICByZXRwdHIgOj0gYWRkKF9yZXQsIDB4MjApCiAgICAgICAgfQogICAgICAgIAogICAgICAgIG1lbWNweShyZXRwdHIsIHNlbGZwdHIsIGJ5dGVzKF9zZWxmKS5sZW5ndGgpOwogICAgICAgIG1lbWNweShyZXRwdHIrYnl0ZXMoX3NlbGYpLmxlbmd0aCwgc3RycHRyLCBieXRlcyhfc3RyKS5sZW5ndGgpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBjb25jYXQoc3RyaW5nIF9zZWxmLCBzdHJpbmcgX3N0cjEsIHN0cmluZyBfc3RyMikKICAgICAgICBpbnRlcm5hbCByZXR1cm5zIChzdHJpbmcgX3JldCkgewogICAgICAgIF9yZXQgPSBuZXcgc3RyaW5nKGJ5dGVzKF9zZWxmKS5sZW5ndGggKyBieXRlcyhfc3RyMSkubGVuZ3RoICsgYnl0ZXMoX3N0cjIpLmxlbmd0aCk7CgogICAgICAgIHVpbnQgc2VsZnB0cjsKICAgICAgICB1aW50IHN0cjFwdHI7CiAgICAgICAgdWludCBzdHIycHRyOwogICAgICAgIHVpbnQgcmV0cHRyOwogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgc2VsZnB0ciA6PSBhZGQoX3NlbGYsIDB4MjApCiAgICAgICAgICAgIHN0cjFwdHIgOj0gYWRkKF9zdHIxLCAweDIwKQogICAgICAgICAgICBzdHIycHRyIDo9IGFkZChfc3RyMiwgMHgyMCkKICAgICAgICAgICAgcmV0cHRyIDo9IGFkZChfcmV0LCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICB1aW50IHBvcyA9IDA7CiAgICAgICAgbWVtY3B5KHJldHB0citwb3MsIHNlbGZwdHIsIGJ5dGVzKF9zZWxmKS5sZW5ndGgpOwogICAgICAgIHBvcyArPSBieXRlcyhfc2VsZikubGVuZ3RoOwogICAgICAgIG1lbWNweShyZXRwdHIrcG9zLCBzdHIxcHRyLCBieXRlcyhfc3RyMSkubGVuZ3RoKTsKICAgICAgICBwb3MgKz0gYnl0ZXMoX3N0cjEpLmxlbmd0aDsKICAgICAgICBtZW1jcHkocmV0cHRyK3Bvcywgc3RyMnB0ciwgYnl0ZXMoX3N0cjIpLmxlbmd0aCk7CiAgICAgICAgcG9zICs9IGJ5dGVzKF9zdHIyKS5sZW5ndGg7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGNvbmNhdChzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyMSwgc3RyaW5nIF9zdHIyLCBzdHJpbmcgX3N0cjMpCiAgICAgICAgaW50ZXJuYWwgcmV0dXJucyAoc3RyaW5nIF9yZXQpIHsKICAgICAgICBfcmV0ID0gbmV3IHN0cmluZyhieXRlcyhfc2VsZikubGVuZ3RoICsgYnl0ZXMoX3N0cjEpLmxlbmd0aCArIGJ5dGVzKF9zdHIyKS5sZW5ndGgKICAgICAgICAgICAgKyBieXRlcyhfc3RyMykubGVuZ3RoKTsKCiAgICAgICAgdWludCBzZWxmcHRyOwogICAgICAgIHVpbnQgc3RyMXB0cjsKICAgICAgICB1aW50IHN0cjJwdHI7CiAgICAgICAgdWludCBzdHIzcHRyOwogICAgICAgIHVpbnQgcmV0cHRyOwogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgc2VsZnB0ciA6PSBhZGQoX3NlbGYsIDB4MjApCiAgICAgICAgICAgIHN0cjFwdHIgOj0gYWRkKF9zdHIxLCAweDIwKQogICAgICAgICAgICBzdHIycHRyIDo9IGFkZChfc3RyMiwgMHgyMCkKICAgICAgICAgICAgc3RyM3B0ciA6PSBhZGQoX3N0cjMsIDB4MjApCiAgICAgICAgICAgIHJldHB0ciA6PSBhZGQoX3JldCwgMHgyMCkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdWludCBwb3MgPSAwOwogICAgICAgIG1lbWNweShyZXRwdHIrcG9zLCBzZWxmcHRyLCBieXRlcyhfc2VsZikubGVuZ3RoKTsKICAgICAgICBwb3MgKz0gYnl0ZXMoX3NlbGYpLmxlbmd0aDsKICAgICAgICBtZW1jcHkocmV0cHRyK3Bvcywgc3RyMXB0ciwgYnl0ZXMoX3N0cjEpLmxlbmd0aCk7CiAgICAgICAgcG9zICs9IGJ5dGVzKF9zdHIxKS5sZW5ndGg7CiAgICAgICAgbWVtY3B5KHJldHB0citwb3MsIHN0cjJwdHIsIGJ5dGVzKF9zdHIyKS5sZW5ndGgpOwogICAgICAgIHBvcyArPSBieXRlcyhfc3RyMikubGVuZ3RoOwogICAgICAgIG1lbWNweShyZXRwdHIrcG9zLCBzdHIzcHRyLCBieXRlcyhfc3RyMykubGVuZ3RoKTsKICAgICAgICBwb3MgKz0gYnl0ZXMoX3N0cjMpLmxlbmd0aDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gdHJpbShzdHJpbmcgX3NlbGYpIGludGVybmFsIHJldHVybnMgKHN0cmluZyBfcmV0KSB7CiAgICAgICAgdWludCBpOwogICAgICAgIHVpbnQ4IGNoOwogICAgICAgIGZvciAoaT0wOyBpPGJ5dGVzKF9zZWxmKS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBjaCA9IHVpbnQ4KGJ5dGVzKF9zZWxmKVtpXSk7CiAgICAgICAgICAgIGlmICghKGNoID09IDB4MjAgfHwgY2ggPT0gMHgwOSB8fCBjaCA9PSAweDBEIHx8IGNoID09IDB4MEEpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1aW50IHN0YXJ0ID0gaTsKICAgICAgICAKICAgICAgICBmb3IgKGk9Ynl0ZXMoX3NlbGYpLmxlbmd0aDsgaT4wOyAtLWkpIHsKICAgICAgICAgICAgY2ggPSB1aW50OChieXRlcyhfc2VsZilbaS0xXSk7CiAgICAgICAgICAgIGlmICghKGNoID09IDB4MjAgfHwgY2ggPT0gMHgwOSB8fCBjaCA9PSAweDBEIHx8IGNoID09IDB4MEEpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1aW50IGVuZCA9IGk7CiAgICAgICAgCiAgICAgICAgX3JldCA9IG5ldyBzdHJpbmcoZW5kLXN0YXJ0KTsKICAgICAgICAKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCByZXRwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgcmV0cHRyIDo9IGFkZChfcmV0LCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBtZW1jcHkocmV0cHRyLCBzZWxmcHRyK3N0YXJ0LCBlbmQtc3RhcnQpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0cmltKHN0cmluZyBfc2VsZiwgc3RyaW5nIF9jaGFycykgaW50ZXJuYWwgcmV0dXJucyAoc3RyaW5nIF9yZXQpIHsKICAgICAgICB1aW50MTYgaTsKICAgICAgICB1aW50MTYgajsKICAgICAgICBib29sIG1hdGNoZWQ7CiAgICAgICAgZm9yIChpPTA7IGk8Ynl0ZXMoX3NlbGYpLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yIChqPTA7IGo8Ynl0ZXMoX2NoYXJzKS5sZW5ndGg7ICsraikgewogICAgICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSA9PSBieXRlcyhfY2hhcnMpW2pdKSB7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFtYXRjaGVkKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1aW50MTYgc3RhcnQgPSBpOwogICAgICAgIAogICAgICAgIGZvciAoaT11aW50MTYoYnl0ZXMoX3NlbGYpLmxlbmd0aCk7IGk+MDsgLS1pKSB7CiAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yIChqPTA7IGo8Ynl0ZXMoX2NoYXJzKS5sZW5ndGg7ICsraikgewogICAgICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpLTFdID09IGJ5dGVzKF9jaGFycylbal0pIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIW1hdGNoZWQpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHVpbnQxNiBlbmQgPSBpOwoKICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgX3JldCA9IG5ldyBzdHJpbmcoZW5kLXN0YXJ0KTsKICAgICAgICAKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCByZXRwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgcmV0cHRyIDo9IGFkZChfcmV0LCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICBtZW1jcHkocmV0cHRyLCBzZWxmcHRyK3N0YXJ0LCBlbmQtc3RhcnQpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBzcGxpdChzdHJpbmcgX3NlbGYsIHN0cmluZyBfZGVsaW0sIHN0cmluZ1tdIHN0b3JhZ2UgX2FycmF5KSBpbnRlcm5hbCB7CiAgICAgICAgLy9XaHkgY2FuIG5vdCB1c2UgZGVsZXRlIF9hcnJheT8KICAgICAgICBmb3IgKHVpbnQgaT0wOyBpPF9hcnJheS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBkZWxldGUgX2FycmF5W2ldOwogICAgICAgIH0KICAgICAgICBfYXJyYXkubGVuZ3RoID0gMDsKCiAgICAgICAgdWludCBzZWxmcHRyOwogICAgICAgIHVpbnQgZGVsaW1wdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgZGVsaW1wdHIgOj0gYWRkKF9kZWxpbSwgMHgyMCkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdWludCBwb3MgPSAwOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIHVpbnQgcHRyOwogICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChieXRlcyhfZGVsaW0pLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHB0ciA9IGZpbmRQdHIoYnl0ZXMoX3NlbGYpLmxlbmd0aC1wb3MsIHNlbGZwdHIrcG9zLCBieXRlcyhfZGVsaW0pLmxlbmd0aCwgZGVsaW1wdHIpIC0gc2VsZnB0cjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHB0ciA8IGJ5dGVzKF9zZWxmKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHB0ciA9IGJ5dGVzKF9zZWxmKS5sZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwdHIgPSBieXRlcyhfc2VsZikubGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBzdHJpbmcgbWVtb3J5IGVsZW0gPSBuZXcgc3RyaW5nKHB0ci1wb3MpOwogICAgICAgICAgICB1aW50IGVsZW1wdHI7CiAgICAgICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgICAgIGVsZW1wdHIgOj0gYWRkKGVsZW0sIDB4MjApCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWVtY3B5KGVsZW1wdHIsIHNlbGZwdHIrcG9zLCBwdHItcG9zKTsKICAgICAgICAgICAgcG9zID0gcHRyICsgYnl0ZXMoX2RlbGltKS5sZW5ndGg7CiAgICAgICAgICAgIF9hcnJheS5wdXNoKGVsZW0pOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGluZGV4T2Yoc3RyaW5nIF9zZWxmLCBzdHJpbmcgX3N0cikgaW50ZXJuYWwgcmV0dXJucyAoaW50IF9yZXQpIHsKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCBzdHJwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgc3RycHRyIDo9IGFkZChfc3RyLCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICB1aW50IHB0ciA9IGZpbmRQdHIoYnl0ZXMoX3NlbGYpLmxlbmd0aCwgc2VsZnB0ciwgYnl0ZXMoX3N0cikubGVuZ3RoLCBzdHJwdHIpIC0gc2VsZnB0cjsKICAgICAgICBpZiAocHRyIDwgYnl0ZXMoX3NlbGYpLmxlbmd0aCkgewogICAgICAgICAgICBfcmV0ID0gaW50KHB0cik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3JldCA9IC0xOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZnVuY3Rpb24gaW5kZXhPZihzdHJpbmcgX3NlbGYsIHN0cmluZyBfc3RyLCB1aW50IHBvcykgaW50ZXJuYWwgcmV0dXJucyAoaW50IF9yZXQpIHsKICAgICAgICB1aW50IHNlbGZwdHI7CiAgICAgICAgdWludCBzdHJwdHI7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzZWxmcHRyIDo9IGFkZChfc2VsZiwgMHgyMCkKICAgICAgICAgICAgc3RycHRyIDo9IGFkZChfc3RyLCAweDIwKQogICAgICAgIH0KICAgICAgICAKICAgICAgICB1aW50IHB0ciA9IGZpbmRQdHIoYnl0ZXMoX3NlbGYpLmxlbmd0aC1wb3MsIHNlbGZwdHIrcG9zLCBieXRlcyhfc3RyKS5sZW5ndGgsIHN0cnB0cikgLSBzZWxmcHRyOwogICAgICAgIGlmIChwdHIgPCBieXRlcyhfc2VsZikubGVuZ3RoKSB7CiAgICAgICAgICAgIF9yZXQgPSBpbnQocHRyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfcmV0ID0gLTE7CiAgICAgICAgfQogICAgfQogICAgCiAgICBmdW5jdGlvbiB0b0ludChzdHJpbmcgX3NlbGYpIGludGVybmFsIHJldHVybnMgKGludCBfcmV0KSB7CiAgICAgICAgX3JldCA9IDA7CiAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHVpbnQxNiBpOwogICAgICAgIHVpbnQ4IGRpZ2l0OwogICAgICAgIGZvciAoaT0wOyBpPGJ5dGVzKF9zZWxmKS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBkaWdpdCA9IHVpbnQ4KGJ5dGVzKF9zZWxmKVtpXSk7CiAgICAgICAgICAgIGlmICghKGRpZ2l0ID09IDB4MjAgfHwgZGlnaXQgPT0gMHgwOSB8fCBkaWdpdCA9PSAweDBEIHx8IGRpZ2l0ID09IDB4MEEpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBib29sIHBvc2l0aXZlID0gdHJ1ZTsKICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpW2ldID09ICcrJykgewogICAgICAgICAgICBwb3NpdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9IGVsc2UgaWYoYnl0ZXMoX3NlbGYpW2ldID09ICctJykgewogICAgICAgICAgICBwb3NpdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgZGlnaXQgPSB1aW50OChieXRlcyhfc2VsZilbaV0pOwogICAgICAgICAgICBpZiAoIShkaWdpdCA+PSAweDMwICYmIGRpZ2l0IDw9IDB4MzkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3JldCA9IF9yZXQqMTAgKyBpbnQoZGlnaXQtMHgzMCk7CiAgICAgICAgfSAgICAgICAgCiAgICAgICAgCiAgICAgICAgaWYgKCFwb3NpdGl2ZSkgewogICAgICAgICAgICBfcmV0ID0gLV9yZXQ7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRvQWRkcmVzcyhzdHJpbmcgX3NlbGYpIGludGVybmFsIHJldHVybnMgKGFkZHJlc3MgX3JldCkgewogICAgICAgIHVpbnQxNiBpOwogICAgICAgIHVpbnQ4IGRpZ2l0OwogICAgICAgIGZvciAoaT0wOyBpPGJ5dGVzKF9zZWxmKS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBkaWdpdCA9IHVpbnQ4KGJ5dGVzKF9zZWxmKVtpXSk7CiAgICAgICAgICAgIGlmICghKGRpZ2l0ID09IDB4MjAgfHwgZGlnaXQgPT0gMHgwOSB8fCBkaWdpdCA9PSAweDBEIHx8IGRpZ2l0ID09IDB4MEEpKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpLmxlbmd0aC1pIDwgMikgewogICAgICAgICAgICByZXR1cm4gYWRkcmVzcygwKTsKICAgICAgICB9CgogICAgICAgIC8vbXVzdCBzdGFydCB3aXRoIDB4CiAgICAgICAgaWYgKCEoYnl0ZXMoX3NlbGYpW2ldID09ICcwJyAmJiBieXRlcyhfc2VsZilbaSsxXXwweDIwID09ICd4JykpIHsKICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3MoMCk7CiAgICAgICAgfQoKICAgICAgICB1aW50IGFkZHIgPSAwOwogICAgICAgIAogICAgICAgIGZvciAoaSs9MjsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgZGlnaXQgPSB1aW50OChieXRlcyhfc2VsZilbaV0pOwogICAgICAgICAgICBpZiAoZGlnaXQgPj0gMHgzMCAmJiBkaWdpdCA8PSAweDM5KSAvLycwJy0nOScKICAgICAgICAgICAgICAgIGRpZ2l0IC09IDB4MzA7CiAgICAgICAgICAgIGVsc2UgaWYgKGRpZ2l0fDB4MjAgPj0gMHg2MSAmJiBkaWdpdHwweDIwIDw9IDB4NjYpIC8vJ2EnLSdmJwogICAgICAgICAgICAgICAgZGlnaXQgPSBkaWdpdC0weDYxKzEwOwogICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3MoMCk7IAogICAgICAgICAgICAKICAgICAgICAgICAgYWRkciA9IGFkZHIqMTYrZGlnaXQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBhZGRyZXNzKGFkZHIpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0b0tleVZhbHVlKHN0cmluZyBfc2VsZiwgc3RyaW5nIF9rZXkpIGludGVybmFsIHJldHVybnMgKHN0cmluZyBfcmV0KSB7CiAgICAgICAgX3JldCA9IG5ldyBzdHJpbmcoYnl0ZXMoX3NlbGYpLmxlbmd0aCArIGJ5dGVzKF9rZXkpLmxlbmd0aCArIDUpOwogICAgICAgIAogICAgICAgIHVpbnQgc2VsZnB0cjsKICAgICAgICB1aW50IGtleXB0cjsKICAgICAgICB1aW50IHJldHB0cjsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIHNlbGZwdHIgOj0gYWRkKF9zZWxmLCAweDIwKQogICAgICAgICAgICBrZXlwdHIgOj0gYWRkKF9rZXksIDB4MjApCiAgICAgICAgICAgIHJldHB0ciA6PSBhZGQoX3JldCwgMHgyMCkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdWludCBwb3MgPSAwOwoKICAgICAgICBieXRlcyhfcmV0KVtwb3MrK10gPSAnIic7CiAgICAgICAgbWVtY3B5KHJldHB0citwb3MsIGtleXB0ciwgYnl0ZXMoX2tleSkubGVuZ3RoKTsKICAgICAgICBwb3MgKz0gYnl0ZXMoX2tleSkubGVuZ3RoOwogICAgICAgIGJ5dGVzKF9yZXQpW3BvcysrXSA9ICciJzsKICAgICAgICAKICAgICAgICBieXRlcyhfcmV0KVtwb3MrK10gPSAnOic7CiAgICAgICAgCiAgICAgICAgYnl0ZXMoX3JldClbcG9zKytdID0gJyInOwogICAgICAgIG1lbWNweShyZXRwdHIrcG9zLCBzZWxmcHRyLCBieXRlcyhfc2VsZikubGVuZ3RoKTsKICAgICAgICBwb3MgKz0gYnl0ZXMoX3NlbGYpLmxlbmd0aDsKICAgICAgICBieXRlcyhfcmV0KVtwb3MrK10gPSAnIic7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGdldFN0cmluZ1ZhbHVlQnlLZXkoc3RyaW5nIF9zZWxmLCBzdHJpbmcgX2tleSkgaW50ZXJuYWwgcmV0dXJucyAoc3RyaW5nIF9yZXQpIHsKICAgICAgICBpbnQgcG9zID0gLTE7CiAgICAgICAgdWludCBzZWFyY2hTdGFydCA9IDA7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgcG9zID0gX3NlbGYuaW5kZXhPZigiXCIiLmNvbmNhdChfa2V5LCAiXCIiKSwgc2VhcmNoU3RhcnQpOwogICAgICAgICAgICBpZiAocG9zID09IC0xKSB7CiAgICAgICAgICAgICAgICBwb3MgPSBfc2VsZi5pbmRleE9mKCInIi5jb25jYXQoX2tleSwgIiciKSwgc2VhcmNoU3RhcnQpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcG9zICs9IGludChieXRlcyhfa2V5KS5sZW5ndGgrMik7CgogICAgICAgICAgICBib29sIGNvbG9uID0gZmFsc2U7CiAgICAgICAgICAgIHdoaWxlICh1aW50KHBvcykgPCBieXRlcyhfc2VsZikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpW3VpbnQocG9zKV0gPT0gJyAnIHx8IGJ5dGVzKF9zZWxmKVt1aW50KHBvcyldID09ICdcdCcgCiAgICAgICAgICAgICAgICAgICAgfHwgYnl0ZXMoX3NlbGYpW3VpbnQocG9zKV0gPT0gJ1xyJyB8fCBieXRlcyhfc2VsZilbdWludChwb3MpXSA9PSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzKF9zZWxmKVt1aW50KHBvcyldID09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgICAgIGNvbG9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHVpbnQocG9zKSA9PSBieXRlcyhfc2VsZikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjb2xvbikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWFyY2hTdGFydCA9IHVpbnQocG9zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBib29sIGRvdWJsZVF1b3RlcyA9IHRydWU7CiAgICAgICAgaW50IHN0YXJ0ID0gX3NlbGYuaW5kZXhPZigiXCIiLCB1aW50KHBvcykpOwogICAgICAgIGlmIChzdGFydCA9PSAtMSkgewogICAgICAgICAgICBkb3VibGVRdW90ZXMgPSBmYWxzZTsKICAgICAgICAgICAgc3RhcnQgPSBfc2VsZi5pbmRleE9mKCInIiwgdWludChwb3MpKTsKICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhcnQgKz0gMTsKICAgICAgICAKICAgICAgICBpbnQgZW5kOwogICAgICAgIGlmIChkb3VibGVRdW90ZXMpIHsKICAgICAgICAgICAgZW5kID0gX3NlbGYuaW5kZXhPZigiXCIiLCB1aW50KHN0YXJ0KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5kID0gX3NlbGYuaW5kZXhPZigiJyIsIHVpbnQoc3RhcnQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIF9yZXQgPSBfc2VsZi5zdWJzdHIodWludChzdGFydCksIHVpbnQoZW5kLXN0YXJ0KSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGdldEludFZhbHVlQnlLZXkoc3RyaW5nIF9zZWxmLCBzdHJpbmcgX2tleSkgaW50ZXJuYWwgcmV0dXJucyAoaW50IF9yZXQpIHsKICAgICAgICBfcmV0ID0gMDsKICAgICAgICBpbnQgcG9zID0gLTE7CiAgICAgICAgdWludCBzZWFyY2hTdGFydCA9IDA7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgcG9zID0gX3NlbGYuaW5kZXhPZigiXCIiLmNvbmNhdChfa2V5LCAiXCIiKSwgc2VhcmNoU3RhcnQpOwogICAgICAgICAgICBpZiAocG9zID09IC0xKSB7CiAgICAgICAgICAgICAgICBwb3MgPSBfc2VsZi5pbmRleE9mKCInIi5jb25jYXQoX2tleSwgIiciKSwgc2VhcmNoU3RhcnQpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcG9zICs9IGludChieXRlcyhfa2V5KS5sZW5ndGgrMik7CgogICAgICAgICAgICBib29sIGNvbG9uID0gZmFsc2U7CiAgICAgICAgICAgIHdoaWxlICh1aW50KHBvcykgPCBieXRlcyhfc2VsZikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoYnl0ZXMoX3NlbGYpW3VpbnQocG9zKV0gPT0gJyAnIHx8IGJ5dGVzKF9zZWxmKVt1aW50KHBvcyldID09ICdcdCcgCiAgICAgICAgICAgICAgICAgICAgfHwgYnl0ZXMoX3NlbGYpW3VpbnQocG9zKV0gPT0gJ1xyJyB8fCBieXRlcyhfc2VsZilbdWludChwb3MpXSA9PSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzKF9zZWxmKVt1aW50KHBvcyldID09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgICAgIGNvbG9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHVpbnQocG9zKSA9PSBieXRlcyhfc2VsZikubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjb2xvbikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWFyY2hTdGFydCA9IHVpbnQocG9zKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdWludCBpID0gdWludChwb3MpOwogICAgICAgIHVpbnQ4IGRpZ2l0OwogICAgICAgIGZvciAoOyBpPGJ5dGVzKF9zZWxmKS5sZW5ndGg7ICsraSkgewogICAgICAgICAgICBkaWdpdCA9IHVpbnQ4KGJ5dGVzKF9zZWxmKVtpXSk7CiAgICAgICAgICAgIGlmICghKGRpZ2l0ID09IDB4MjAgfHwgZGlnaXQgPT0gMHgwOSB8fCBkaWdpdCA9PSAweDBEIHx8IGRpZ2l0ID09IDB4MEEgCiAgICAgICAgICAgIHx8IGRpZ2l0ID09IDB4M0EgLyo6Ki8gfHwgZGlnaXQgPT0gMHgyMiAvKiIqLyB8fCBkaWdpdCA9PSAweDI3IC8qJyovKSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgYm9vbCBwb3NpdGl2ZSA9IHRydWU7CiAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSA9PSAnKycpIHsKICAgICAgICAgICAgcG9zaXRpdmUgPSB0cnVlOwogICAgICAgICAgICBpKys7CiAgICAgICAgfSBlbHNlIGlmKGJ5dGVzKF9zZWxmKVtpXSA9PSAnLScpIHsKICAgICAgICAgICAgcG9zaXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KCiAgICAgICAgZm9yICg7IGk8Ynl0ZXMoX3NlbGYpLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGRpZ2l0ID0gdWludDgoYnl0ZXMoX3NlbGYpW2ldKTsKICAgICAgICAgICAgaWYgKCEoZGlnaXQgPj0gMHgzMCAmJiBkaWdpdCA8PSAweDM5KSkgewogICAgICAgICAgICAgICAgaWYgKCFwb3NpdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIF9yZXQgPSAtX3JldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBfcmV0ID0gX3JldCoxMCArIGludChkaWdpdC0weDMwKTsKICAgICAgICB9ICAgICAgICAKICAgICAgICAKICAgICAgICBpZiAoIXBvc2l0aXZlKSB7CiAgICAgICAgICAgIF9yZXQgPSAtX3JldDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9VcHBlcihzdHJpbmcgX3NlbGYpIGludGVybmFsIHJldHVybnMgKHN0cmluZyBfcmV0KSB7CiAgICAgICAgZm9yICh1aW50IGk9MDsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSA+PSAnYScgJiYgYnl0ZXMoX3NlbGYpW2ldIDw9ICd6JykgewogICAgICAgICAgICAgICAgYnl0ZXMoX3NlbGYpW2ldICY9IH4weDIwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIF9yZXQgPSBfc2VsZjsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gdG9Mb3dlcihzdHJpbmcgX3NlbGYpIGludGVybmFsIHJldHVybnMgKHN0cmluZyBfcmV0KSB7CiAgICAgICAgZm9yICh1aW50IGk9MDsgaTxieXRlcyhfc2VsZikubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKGJ5dGVzKF9zZWxmKVtpXSA+PSAnQScgJiYgYnl0ZXMoX3NlbGYpW2ldIDw9ICdaJykgewogICAgICAgICAgICAgICAgYnl0ZXMoX3NlbGYpW2ldIHw9IDB4MjA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgX3JldCA9IF9zZWxmOwogICAgfQoJCiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoc3RyaW5nIF9zZWxmLCBzdHJpbmcgX2tleSkgaW50ZXJuYWwgcmV0dXJucyAoYm9vbCBfcmV0KSB7CiAgICAgICAgaW50IHBvcyA9IF9zZWxmLmluZGV4T2YoIlwiIi5jb25jYXQoX2tleSwgIlwiIikpOwogICAgICAgIGlmIChwb3MgPT0gLTEpIHsKICAgICAgICAgICAgcG9zID0gX3NlbGYuaW5kZXhPZigiJyIuY29uY2F0KF9rZXksICInIikpOwogICAgICAgICAgICBpZiAocG9zID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGluQXJyYXkoc3RyaW5nIF9zZWxmLCBzdHJpbmdbXSBzdG9yYWdlIF9hcnJheSkgaW50ZXJuYWwgcmV0dXJucyAoYm9vbCBfcmV0KSB7CiAgICAgICAgZm9yICh1aW50IGk9MDsgaTxfYXJyYXkubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgaWYgKF9zZWxmLmVxdWFscyhfYXJyYXlbaV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogCiAgICBmdW5jdGlvbiBpbkFycmF5Tm9DYXNlKHN0cmluZyBfc2VsZiwgc3RyaW5nW10gc3RvcmFnZSBfYXJyYXkpIGludGVybmFsIHJldHVybnMgKGJvb2wgX3JldCkgewogICAgICAgIGZvciAodWludCBpPTA7IGk8X2FycmF5Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGlmIChfc2VsZi5lcXVhbHNOb0Nhc2UoX2FycmF5W2ldKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgfQ==";
    public static final String SAFE_MATH_SOURCE = "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjQ7CgoKbGlicmFyeSBTYWZlTWF0aCB7CiAgICBmdW5jdGlvbiBtdWwodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIC8vIEdhcyBvcHRpbWl6YXRpb246IHRoaXMgaXMgY2hlYXBlciB0aGFuIHJlcXVpcmluZyAnYScgbm90IGJlaW5nIHplcm8sIGJ1dCB0aGUKICAgICAgICAvLyBiZW5lZml0IGlzIGxvc3QgaWYgJ2InIGlzIGFsc28gdGVzdGVkLgogICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL09wZW5aZXBwZWxpbi9vcGVuemVwcGVsaW4tc29saWRpdHkvcHVsbC81MjIKICAgICAgICBpZiAoYSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgdWludDI1NiBjID0gYSAqIGI7CiAgICAgICAgcmVxdWlyZShjIC8gYSA9PSBiLCAiU2FmZU1hdGg6IG11bHRpcGxpY2F0aW9uIG92ZXJmbG93Iik7CgogICAgICAgIHJldHVybiBjOwogICAgfQogICAgZnVuY3Rpb24gZGl2KHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICAvLyBTb2xpZGl0eSBvbmx5IGF1dG9tYXRpY2FsbHkgYXNzZXJ0cyB3aGVuIGRpdmlkaW5nIGJ5IDAKICAgICAgICByZXF1aXJlKGIgPiAwLCAiU2FmZU1hdGg6IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICB1aW50MjU2IGMgPSBhIC8gYjsKICAgICAgICAvLyBhc3NlcnQoYSA9PSBiICogYyArIGEgJSBiKTsgLy8gVGhlcmUgaXMgbm8gY2FzZSBpbiB3aGljaCB0aGlzIGRvZXNuJ3QgaG9sZAoKICAgICAgICByZXR1cm4gYzsKICAgIH0KICAgIGZ1bmN0aW9uIHN1Yih1aW50MjU2IGEsIHVpbnQyNTYgYikgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmVxdWlyZShiIDw9IGEsICJTYWZlTWF0aDogc3VidHJhY3Rpb24gb3ZlcmZsb3ciKTsKICAgICAgICB1aW50MjU2IGMgPSBhIC0gYjsKCiAgICAgICAgcmV0dXJuIGM7CiAgICB9CiAgICBmdW5jdGlvbiBhZGQodWludDI1NiBhLCB1aW50MjU2IGIpIGludGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHVpbnQyNTYgYyA9IGEgKyBiOwogICAgICAgIHJlcXVpcmUoYyA+PSBhLCAiU2FmZU1hdGg6IGFkZGl0aW9uIG92ZXJmbG93Iik7CgogICAgICAgIHJldHVybiBjOwogICAgfQogICAgZnVuY3Rpb24gbW9kKHVpbnQyNTYgYSwgdWludDI1NiBiKSBpbnRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXF1aXJlKGIgIT0gMCwgIlNhZmVNYXRoOiBtb2R1bG8gYnkgemVybyIpOwogICAgICAgIHJldHVybiBhICUgYjsKICAgIH0KfQo=";
    public static final String TABLE_SOURCE = "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjQ7Cgpjb250cmFjdCBUYWJsZUZhY3RvcnkgewogICAgZnVuY3Rpb24gb3BlblRhYmxlKHN0cmluZykgcHVibGljIHZpZXcgcmV0dXJucyAoVGFibGUpOyAvL29wZW4gdGFibGUKICAgIGZ1bmN0aW9uIGNyZWF0ZVRhYmxlKHN0cmluZywgc3RyaW5nLCBzdHJpbmcpIHB1YmxpYyByZXR1cm5zIChpbnQyNTYpOyAvL2NyZWF0ZSB0YWJsZQp9CgovL3NlbGVjdCBjb25kaXRpb24KY29udHJhY3QgQ29uZGl0aW9uIHsKICAgIGZ1bmN0aW9uIEVRKHN0cmluZywgaW50MjU2KSBwdWJsaWMgdmlldzsKICAgIGZ1bmN0aW9uIEVRKHN0cmluZywgc3RyaW5nKSBwdWJsaWMgdmlldzsKICAgIGZ1bmN0aW9uIEVRKHN0cmluZywgYWRkcmVzcykgcHVibGljIHZpZXc7CgogICAgZnVuY3Rpb24gTkUoc3RyaW5nLCBpbnQyNTYpIHB1YmxpYyB2aWV3OwogICAgZnVuY3Rpb24gTkUoc3RyaW5nLCBzdHJpbmcpIHB1YmxpYyB2aWV3OwoKICAgIGZ1bmN0aW9uIEdUKHN0cmluZywgaW50MjU2KSBwdWJsaWMgdmlldzsKICAgIGZ1bmN0aW9uIEdFKHN0cmluZywgaW50MjU2KSBwdWJsaWMgdmlldzsKCiAgICBmdW5jdGlvbiBMVChzdHJpbmcsIGludDI1NikgcHVibGljIHZpZXc7CiAgICBmdW5jdGlvbiBMRShzdHJpbmcsIGludDI1NikgcHVibGljIHZpZXc7CgogICAgZnVuY3Rpb24gbGltaXQoaW50MjU2KSBwdWJsaWMgdmlldzsKICAgIGZ1bmN0aW9uIGxpbWl0KGludDI1NiwgaW50MjU2KSBwdWJsaWMgdmlldzsKfQoKLy9vbmUgcmVjb3JkCmNvbnRyYWN0IEVudHJ5IHsKICAgIGZ1bmN0aW9uIGdldEludChzdHJpbmcpIHB1YmxpYyB2aWV3IHJldHVybnMgKGludDI1Nik7CiAgICBmdW5jdGlvbiBnZXRVSW50KHN0cmluZykgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBnZXRBZGRyZXNzKHN0cmluZykgcHVibGljIHZpZXcgcmV0dXJucyAoYWRkcmVzcyk7CiAgICBmdW5jdGlvbiBnZXRCeXRlczY0KHN0cmluZykgcHVibGljIHZpZXcgcmV0dXJucyAoYnl0ZXMxWzY0XSk7CiAgICBmdW5jdGlvbiBnZXRCeXRlczMyKHN0cmluZykgcHVibGljIHZpZXcgcmV0dXJucyAoYnl0ZXMzMik7CiAgICBmdW5jdGlvbiBnZXRTdHJpbmcoc3RyaW5nKSBwdWJsaWMgdmlldyByZXR1cm5zIChzdHJpbmcpOwoKICAgIGZ1bmN0aW9uIHNldChzdHJpbmcsIGludDI1NikgcHVibGljOwogICAgZnVuY3Rpb24gc2V0KHN0cmluZywgdWludDI1NikgcHVibGljOwogICAgZnVuY3Rpb24gc2V0KHN0cmluZywgc3RyaW5nKSBwdWJsaWM7CiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nLCBhZGRyZXNzKSBwdWJsaWM7Cn0KCi8vcmVjb3JkIHNldHMKY29udHJhY3QgRW50cmllcyB7CiAgICBmdW5jdGlvbiBnZXQoaW50MjU2KSBwdWJsaWMgdmlldyByZXR1cm5zIChFbnRyeSk7CiAgICBmdW5jdGlvbiBzaXplKCkgcHVibGljIHZpZXcgcmV0dXJucyAoaW50MjU2KTsKfQoKLy9UYWJsZSBtYWluIGNvbnRyYWN0CmNvbnRyYWN0IFRhYmxlIHsKICAgIGZ1bmN0aW9uIHNlbGVjdChzdHJpbmcsIENvbmRpdGlvbikgcHVibGljIHZpZXcgcmV0dXJucyAoRW50cmllcyk7CiAgICBmdW5jdGlvbiBpbnNlcnQoc3RyaW5nLCBFbnRyeSkgcHVibGljIHJldHVybnMgKGludDI1Nik7CiAgICBmdW5jdGlvbiB1cGRhdGUoc3RyaW5nLCBFbnRyeSwgQ29uZGl0aW9uKSBwdWJsaWMgcmV0dXJucyAoaW50MjU2KTsKICAgIGZ1bmN0aW9uIHJlbW92ZShzdHJpbmcsIENvbmRpdGlvbikgcHVibGljIHJldHVybnMgKGludDI1Nik7CgogICAgZnVuY3Rpb24gbmV3RW50cnkoKSBwdWJsaWMgdmlldyByZXR1cm5zIChFbnRyeSk7CiAgICBmdW5jdGlvbiBuZXdDb25kaXRpb24oKSBwdWJsaWMgdmlldyByZXR1cm5zIChDb25kaXRpb24pOwp9Cgpjb250cmFjdCBLVlRhYmxlRmFjdG9yeSB7CiAgICBmdW5jdGlvbiBvcGVuVGFibGUoc3RyaW5nKSBwdWJsaWMgdmlldyByZXR1cm5zIChLVlRhYmxlKTsKICAgIGZ1bmN0aW9uIGNyZWF0ZVRhYmxlKHN0cmluZywgc3RyaW5nLCBzdHJpbmcpIHB1YmxpYyByZXR1cm5zIChpbnQyNTYpOwp9CgovL0tWVGFibGUgcGVyIHBlcm1pYXJ5IGtleSBoYXMgb25seSBvbmUgRW50cnkKY29udHJhY3QgS1ZUYWJsZSB7CiAgICBmdW5jdGlvbiBnZXQoc3RyaW5nKSBwdWJsaWMgdmlldyByZXR1cm5zIChib29sLCBFbnRyeSk7CiAgICBmdW5jdGlvbiBzZXQoc3RyaW5nLCBFbnRyeSkgcHVibGljIHJldHVybnMgKGludDI1Nik7CiAgICBmdW5jdGlvbiBuZXdFbnRyeSgpIHB1YmxpYyB2aWV3IHJldHVybnMgKEVudHJ5KTsKfQo=";
    public static final String ROLES_SOURCE = "cHJhZ21hIHNvbGlkaXR5IF4wLjQuMjQ7CgpsaWJyYXJ5IFJvbGVzIHsKICAgIHN0cnVjdCBSb2xlIHsKICAgICAgICBtYXBwaW5nIChhZGRyZXNzID0+IGJvb2wpIGJlYXJlcjsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGQoUm9sZSBzdG9yYWdlIHJvbGUsIGFkZHJlc3MgYWNjb3VudCkgaW50ZXJuYWwgewogICAgICAgIHJlcXVpcmUoIWhhcyhyb2xlLCBhY2NvdW50KSwgIlJvbGVzOiBhY2NvdW50IGFscmVhZHkgaGFzIHJvbGUiKTsKICAgICAgICByb2xlLmJlYXJlclthY2NvdW50XSA9IHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlKFJvbGUgc3RvcmFnZSByb2xlLCBhZGRyZXNzIGFjY291bnQpIGludGVybmFsIHsKICAgICAgICByZXF1aXJlKGhhcyhyb2xlLCBhY2NvdW50KSwgIlJvbGVzOiBhY2NvdW50IGRvZXMgbm90IGhhdmUgcm9sZSIpOwogICAgICAgIHJvbGUuYmVhcmVyW2FjY291bnRdID0gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gaGFzKFJvbGUgc3RvcmFnZSByb2xlLCBhZGRyZXNzIGFjY291bnQpIGludGVybmFsIHZpZXcgcmV0dXJucyAoYm9vbCkgewogICAgICAgIHJlcXVpcmUoYWNjb3VudCAhPSBhZGRyZXNzKDApLCAiUm9sZXM6IGFjY291bnQgaXMgdGhlIHplcm8gYWRkcmVzcyIpOwogICAgICAgIHJldHVybiByb2xlLmJlYXJlclthY2NvdW50XTsKICAgIH0KfQo=";
    public static final String ADDRESS_MD = "# Address\n" +
            "\n" +
            "Address library\n" +
            "\n" +
            "Address contract usage methods can refer to the Points contract warehouse。\n" +
            "\n" +
            "1. Detect whether the address is a contract\n" +
            "2. Detect if the address is 0x0";
    public static final String LIB_STRING_MD = "# String library\n" +
            "\n" +
            "String library\n" +
            "\n" +
            "Provides common string-related operations, including copying, finding, replacing, and so on。";
    public static final String SAFE_MATH_MD = "# SafeMath\n" +
            "\n" +
            "SafeMath library\n" +
            "\n" +
            "A secure mathematical library that provides a safe addition, subtract, and divide。The use of secure mathematical contracts can refer to the Points contract warehouse。";
    public static final String TABLE_MD = "# table\n" +
            "\n" +
            "table library\n" +
            "\n" +
            "BCOS CRUD uses the base library, which you can reference by re-contract calling CRUD.Table contract usage methods can be described by referring to the assat example in the bcos document https://fisco-bcos-documentation.readthedocs.io.";
    public static final String ROLES_MD ="# Roles\n" +
            "\n" +
            "Role permissions control contracts\n";
}
